added some more missing conversions.
authorØyvind Kolås <ok@src.gnome.org>
Tue, 4 Nov 2008 00:31:34 +0000 (00:31 +0000)
committerØyvind Kolås <ok@src.gnome.org>
Tue, 4 Nov 2008 00:31:34 +0000 (00:31 +0000)
* extensions/gegl-fixups.c: (conv_rgbAF_rgbaF),
(conv_rgbAF_lrgba8), (init): added some more missing conversions.

svn path=/trunk/; revision=352

ChangeLog
extensions/gegl-fixups.c

index f3be51f29155ddeeb245eabe3821fb643e7e6af8..08887ef88df5b2c607ddcac034140a20770bd6a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-11-04  Øyvind Kolås  <pippin@gimp.org>
+
+       * extensions/gegl-fixups.c: (conv_rgbAF_rgbaF),
+       (conv_rgbAF_lrgba8), (init): added some more missing conversions.
+
 2008-11-04  Øyvind Kolås  <pippin@gimp.org>
 
        * extensions/gegl-fixups.c: (conv_rgbaF_rgbAF), (init): added missing,
index 49480ac54be303a6d6f7fbbf7c79f0dcf181ef64..c84ad72ca5477e5f9c9faae4058e732a4cbf6397 100644 (file)
@@ -462,6 +462,54 @@ conv_rgbaF_rgbAF (unsigned char *srcc,
 }
 
 
+static long
+conv_rgbAF_rgbaF (unsigned char *srcc,
+                  unsigned char *dstc,
+                  long           samples)
+{
+  float *src = (void *) srcc;
+  float *dst = (void *) dstc;
+  long           n   = samples;
+
+  while (n--)
+    {
+      float alpha = src[3];
+      float recip = 1.0/alpha;
+      dst[0] = src[0] * recip;
+      dst[1] = src[1] * recip;
+      dst[2] = src[2] * recip;
+      dst[3] = alpha;
+      src   += 4;
+      dst   += 4;
+    }
+  return samples;
+}
+
+
+static long
+conv_rgbAF_lrgba8 (unsigned char *srcc,
+                   unsigned char *dstc,
+                   long           samples)
+{
+  float *src = (void *) srcc;
+  unsigned char *dst = (void *) dstc;
+  long           n   = samples;
+
+  while (n--)
+    {
+      float alpha = src[3];
+      float recip = (1.0/alpha)*255.0;
+      dst[0] = (src[0] * recip);
+      dst[1] = (src[1] * recip);
+      dst[2] = (src[2] * recip);
+      dst[3] = alpha*255.0;
+      src   += 4;
+      dst   += 4;
+    }
+  return samples;
+}
+
+
 
 #define conv_rgb8_rgbAF    conv_rgb8_rgbaF
 
@@ -486,6 +534,16 @@ init (void)
     babl_component ("Ba"),
     babl_component ("A"),
     NULL);
+
+  Babl *lrgba8 = babl_format_new (
+    babl_model ("RGBA"),
+    babl_type ("u8"),
+    babl_component ("R"),
+    babl_component ("G"),
+    babl_component ("B"),
+    babl_component ("A"),
+    NULL);
+
   Babl *rgba8 = babl_format_new (
     babl_model ("R'G'B'A"),
     babl_type ("u8"),
@@ -526,6 +584,8 @@ init (void)
   babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL)
 
   o (rgbaF, rgbAF);
+  o (rgbAF, rgbaF);
+  o (rgbAF, lrgba8);
   o (rgb8, rgbaF);
   o (rgb8, rgbAF);
   o (rgba8, rgbaF);